package com.nuanshui.heatedloan.baseservice.facade;

import com.nuanshui.heatedloan.baseservice.form.MediaForm;
import com.nuanshui.heatedloan.baseservice.vo.MediaVO;
import com.nuanshui.heatedloan.constant.DubboCacheRegion;
import com.nuanshui.heatedloan.dubbo.extension.cache.Cacheable;

import java.util.List;


public interface MediaService {
	
	/**
	 * 保存mediaStr 
	 * @param @param mediaStr
	 * @param @param mediaBizId 业务类型
	 * @author guohao
	 * @date 2016年11月18日 下午2:49:06
	 * @since $
	 */
    void save(String mediaStr, int mediaBizType, String mediaBizId);


	/**
	 * 保存单个Media
	 * @param form
	 */
	void save(MediaForm form);

	/**
	 * 保存media
	 * @param forms
	 * @param mediaBizType
	 * @param mediaBizId
	 */
	void save(List<MediaForm> forms, int mediaBizType,String mediaBizId);
	
	/**
	 * 获取
	 * @param @return
	 * @author guohao
	 * @date 2016年11月18日 下午4:20:28
	 * @since $
	 */
    List<MediaVO> listAllMedia(String bizId, int bizType);
	
	void updateMediaTest(MediaVO vo);
	
	/**
	 * 
	 * @param @param bizId 业务id
	 * @param @param bizType 业务类型 
	 * @param @param mediaType 要获取的media类型
	 * @param @return
	 * @author guohao
	 * @date 2016年11月18日 下午4:22:41
	 * @since $
	 */
    List<MediaVO> listMedia(String bizId, int bizType, int... mediaTypes);
	
	
	/**
	 * 获取默认的mediaText
	 * @author Gonzo
	 * @date 2016年12月21日下午5:00:52
	 * @param mediaBizType
	 * @return
	 * @since 1.0.0
	 */
    List<MediaForm> loadDefaultMediaTextByBizType(Integer mediaBizType);
	
	/**
	 * 获取第一个media参数
	 * @author Gonzo
	 * @date 2016年11月24日下午12:14:40
	 * @param bizId
	 * @param bizType
	 * @param mediaTypes
	 * @return
	 */
    MediaVO findFirstMedia(String bizId, int bizType, int... mediaTypes);
	
	//置为存档
    void deleteMediaHtml(String mediaBizId, int mediaBizType);
	void deleteMediaVoice(String mediaBizId, int mediaBizType);
	void deleteMediaImage(String mediaBizId, int mediaBizType);
	void deleteMediaVideo(String mediaBizId, int mediaBizType);
	void deleteMediaText(String mediaBizId, int mediaBizType);
	
	@Cacheable(value=DubboCacheRegion.CACHE_CONSTANT_MEDIA_HTML)
    List<MediaVO> loadHtmlByBizIdAndBizType(String bizId, int bizType);
	
	@Cacheable(value=DubboCacheRegion.CACHE_CONSTANT_MEDIA_VOICE)
    List<MediaVO> loadVoiceByBizIdAndBizType(String bizId, int bizType);
	
	@Cacheable(value=DubboCacheRegion.CACHE_CONSTANT_MEDIA_IMAGE)
    List<MediaVO> loadImageByBizIdAndBizType(String bizId, int bizType);
	
	@Cacheable(value=DubboCacheRegion.CACHE_CONSTANT_MEDIA_VIDEO)
    List<MediaVO> loadVideoByBizIdAndBizType(String bizId, int bizType);
	
	@Cacheable(value=DubboCacheRegion.CACHE_CONSTANT_MEDIA_TEXT)
    List<MediaVO> loadTextByBizIdAndBizType(String bizId, int bizType);
	/**
	 * 获取除了某个不需要的类型之类的数据
	 * @author Gonzo
	 * @date 2016年11月28日下午4:24:12
	 * @param bizId
	 * @param bizType
	 * @param mediaTypes
	 * @return
	 */
    List<MediaVO> listMediaByNotWhantType(String bizId, int bizType, Integer... mediaTypes);
	

	/**
	 * 置为存档
	 * @author Gonzo
	 * @date 2016年12月5日下午4:10:11
	 * @param mediaBizType
	 * @param mediaBizId
	 * @param mediaTypes
	 * @since 1.0.0
	 */
    void deleteMedia(String mediaBizId, int mediaBizType, int... mediaTypes);


	void updateMedia(MediaVO vo);

}
